import { Pool } from 'pg';

// 根据环境变量决定使用哪种数据库
const useMemoryDatabase = process.env.USE_MEMORY_DB === 'true';

// 创建数据库连接池
let pool: Pool;

if (useMemoryDatabase) {
  // 使用内存数据库（开发环境）
  console.log('使用内存数据库（开发模式）');
  // 延迟导入内存数据库
  const getMemoryDatabase = () => {
    const MemoryDatabase = require('./memoryDatabase').default;
    return MemoryDatabase as unknown as Pool;
  };
  pool = getMemoryDatabase();
} else {
  // 使用PostgreSQL（生产环境）
  console.log('使用PostgreSQL数据库');
  pool = new Pool({
    host: process.env.DB_HOST || 'localhost',
    port: parseInt(process.env.DB_PORT || '5432'),
    user: process.env.DB_USER || 'postgres',
    password: process.env.DB_PASSWORD || 'password',
    database: process.env.DB_NAME || 'bmad_db',
    max: 20, // 最大连接数
    idleTimeoutMillis: 30000, // 空闲连接超时时间
    connectionTimeoutMillis: 2000, // 连接超时时间
  });

  // 测试数据库连接
  pool.on('connect', () => {
    console.log('Connected to PostgreSQL database');
  });

  pool.on('error', (err) => {
    console.error('Unexpected error on idle client', err);
    process.exit(-1);
  });
}

export default pool;